/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tables;

/**
 *
 * @author rehgon
 */

import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Teile {
    
    public static void produziereTeil(Connection conn, int teilNr) {                                        

        //Initialisierung der Kalenderfunktion
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        
        //Setze Datum auf heute
        String datum = dateFormat.format(calendar.getTime());
        String tmpDatum = dateFormat.format(calendar.getTime());;
        
        int Level = 0;
        
        try {
            
            //Bezeichnung des zu produzierendes Teils ausgeben
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(
                  " select top 1 bezeichnung from Teile"
                + " where teilNr = " + teilNr
            );
            while(rs.next()) {                
                System.out.println("--------------------------------------");
                System.out.println("Beginne Planung für die Produktion des Teils \"" + rs.getString("bezeichnung") + "\"");
                System.out.println("--------------------------------------");
            }
            
            //Abfrage und Iteration aller Unterteile
            ResultSet unterTeile = selectAllUnterteile(conn, teilNr);
            while(unterTeile.next()) {
                
                //Setze neues Datum wenn das Level wechselt
                if (unterTeile.getInt("Level") != Level) {                                        
                    try {
                        calendar.setTime(dateFormat.parse(tmpDatum));
                    } catch (ParseException ex) {
                        System.out.println(ex.getMessage());
                    }
                    calendar.add(Calendar.DAY_OF_MONTH, 1);
                    datum = dateFormat.format(calendar.getTime());
                }
                Level = unterTeile.getInt("Level");
                
                //Bestellung aller Basisteile, sonst Produziere Teil
                if (unterTeile.getInt("istBasisteil") == 0) {
                    System.out.println("Produziere \"" +unterTeile.getString("bezeichnung") + "\":");
                    tmpDatum = Fertigungsschritt.produziere(conn, unterTeile.getInt("teilNr"), datum);
                    System.out.println("--------------------------------------");
                } else {
                    System.out.println("Bestelle Basisteil \"" +unterTeile.getString("bezeichnung") + "\"");
                    System.out.println("--------------------------------------");
                }
            }

            System.out.println("--------------------------------------");
            System.out.println("Die Fertigungsplanung ist abgeschlossen");
            System.out.println("--------------------------------------");
            
        } catch(SQLException ex) {
            ex.getMessage();
        }
    }
    
    public static void insertTeil(Connection conn, String bezeichnung, float preis, float groessenangaben, boolean istBasisteil, int wirdGeliefertVon, String wirdProduziertVon) {
        
        int valueOfIstBasisteil = 0;
        if (istBasisteil) {
            valueOfIstBasisteil = 1;
        }
        
        try {
            Statement stmt = conn.createStatement();
            stmt.executeUpdate(
                  " insert into Teile(bezeichnung, preis, groessenangaben, istBasisteil, wirdGeliefertVon, wirdProduziertVon)"
                + " values('" + bezeichnung + "'," + preis + "," + groessenangaben + "," + valueOfIstBasisteil + "," + wirdGeliefertVon + ",'" + wirdProduziertVon + "')"
            );
            System.out.println("Das Teil mit den Angaben: " + bezeichnung + " | " + preis + " | " + groessenangaben + " | " + istBasisteil + " | " + wirdGeliefertVon + " | " + wirdProduziertVon + " wurde erstellt");
        } catch (SQLException ex){
            System.out.println(ex.getMessage());
        }
    }
    
    public static void selectAllTeile(Connection conn) {
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(""
                    + " select t.*, l.name as lname from Teile t"
                    + " inner join Lieferanten l on l.LieferantId = t.wirdGeliefertVon"
            );
            while(rs.next()) {
                System.out.println(rs.getInt("teilNr") + " | " + rs.getString("bezeichnung") + " | " + rs.getFloat("preis") + " | " + rs.getFloat("groessenangaben") + " | " + rs.getBoolean("istBasisteil") + " | " + rs.getString("lname"));
            }
            stmt.close();
        } catch(SQLException ex) {
            ex.getMessage();
        }
    }
    
    public static ResultSet selectAllUnterteile(Connection conn, int teilNr) {
        
        ResultSet unterTeile = null;
        
        try {
            Statement stmt = conn.createStatement();
            unterTeile = stmt.executeQuery( 
                    " select * from getSubpart(" + teilNr  +")"
                  + " order by Level desc" );          
        } catch(SQLException ex) {
            ex.getMessage();
        } finally {
            return unterTeile;
        }
    }
}
